package com.scalpel.common.util;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;

/**
 * 
 * 
 * 图片处理工具类
 *
 * @author    scalpel.Wang
 * @version   2015年10月29日下午7:23:20
 * @see         // 引用的类
 * Method List: 方法列表                       
 *
 */
public class ImageUtil {

    /**
     *
     * @param src 原始图像
     * @param toWidth
     * @param toHeight
     * @return 返回处理后的图像
     * @throws IOException
     */
    private static BufferedImage zoomImage(String src,int toWidth,int toHeight) throws IOException {  
          
        BufferedImage result = null;  
  
        try {
			BufferedImage im=null;
			if (im==null) {
				File srcfile = new File(src);
				if (!srcfile.exists()) {
					throw new IOException("文件不存在");
				}
				im = ImageIO.read(srcfile);

			}
            /* 原始图像的宽度和高度 */  
            int width = im.getWidth();  
            int height = im.getHeight();  
            if(toHeight == 0){
            	toHeight=height;
            }
            if(toWidth == 0){
            	toWidth=width;
            }
            /* 新生成结果图片 */  
            result = new BufferedImage(toWidth, toHeight,BufferedImage.TYPE_INT_RGB);  
            result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight,  java.awt.Image.SCALE_SMOOTH), 0, 0, null);  
		} catch (Exception e) {
        	throw new IOException(e.getMessage());
        }  
        return result;  
  
    }  
    
    /**
	  * 图片缩放
	  * @author 王敏
	  * @time 2015年10月29日下午7:22:22
	  * @param  filePath 参数列表
	  * @return   返回类型说明
	  * @see    
	  *
     */
    public static boolean OuputImage(String filePath,int width,int height,OutputStream out) {  
        try {  
        	if(!OutputStream(filePath,width,height,out))
        	{
        		
	        	BufferedImage im=ImageUtil.zoomImage(filePath, width, height);
	            /*输出到文件流*/  
	            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
	            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);  
	            /* 压缩质量 */  
	            jep.setQuality(0.9f, true);  
	            encoder.encode(im, jep);  
            }
           /*近JPEG编码*/  
            //out.close();  
            return true;  
        } catch (Exception e) {  
        	e.printStackTrace();
            return false;  
        }  
    }
    
    public static boolean OutputStream(String filePath,int width,int height,OutputStream out)
    {
    	if(out instanceof FileOutputStream)
    	{
    		return false;
    	}
    	String tmp=filePath.substring(0,filePath.lastIndexOf("/")+1)+width+"x"+height+"_";
    	String tmp1=filePath.substring(filePath.lastIndexOf("/")+1);
    	
    	File f=new File(tmp+tmp1);
    	System.out.println("=========>"+f.getPath()+"----------->"+f.exists());
    	if(f.exists())
    	{
    		FileInputStream in=null;
    		try{
	    		in=new FileInputStream(f);
	    		int len=0;
	    		byte data[]=new byte[1024];
	    		while((len=in.read(data))>0)
	    		{
	    			out.write(data, 0, len);
	    		}
	    		out.flush();
	    		out.close();
	    		in.close();
	    		return true;
    		}catch(Exception e){
    			
    			return false;
    		}finally{
    			if(in != null){
    				try {
						in.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
    			}
    		}
    		
    	}
		return false;
    	
    }
    
    /**
     * 压缩图片
     * @param file1
     * @param file2
     * @throws IOException
     */
    public static void compressedImage(byte[] file1,String file2,int size2) throws IOException{
        
        int size1 = file1.length;
        double scale = 1.0d ;
        if(size1 >= size2*1024){
            if(size1 > 0){
                scale = (size2*1024f) / size1  ;
            }
        }
        ByteArrayInputStream bais = new ByteArrayInputStream(file1);
        //String nameSuff = org.apache.commons.lang.StringUtils.substringAfterLast(file2,".");
        bais.close();
    }
    
    
}
